/*
 * @Author: liujm
 * @Date: 2022-11-11 17:59:11
 * @Description: 返回结果默认部分
 */

import { timeConvert } from 'jdf-util';

class DefaultResult {
  constructor(param) {
    this.param = param;
    const {
      processInstance: {
        draftUser: {
          userName,
          deptName,
          identityId,
          userId,
          deptId,
        },
        processDefinitionKey,
        processDefinitionName,
        processDefinitionVersion,
      },
      orgPath,
      taskInfo,
    } = param;
    this.result = {
      createTime: taskInfo.createTime,
      // 起草时间
      startTime: timeConvert(taskInfo.createTime, 'YYYY-MM-DD HH:mm:ss'),
      // 模板code
      definitionId: processDefinitionKey,
      definitionName: processDefinitionName,
      instanceVersion: processDefinitionVersion,
      // 创建人名称
      userName,
      userIdentity: identityId,
      userId,
      orgPath,
      orgName: deptName,
      orgId: deptId,
      documentInfo: '{}',
      // 缓急默认值-一般
      urgencys: '1',
      // 密级默认值-无（密级）
      secret: '0',
    };
  }

  getDefaultResult = () => this.result;

  /** service公共字段提取
   * 该方法把一些需要系统自动生成值的公共字段都提取出来了
   * 如果需要除了这些公共以外的字段赋默认值需要在方法外单独定义
   * @param {Object} base 基本信息
   * @param {String} data 数据
   * @param {Object} params 其他参数
   */
  getDraftParams = (base, data = {}, params = {}) => {
    const {
      taskInfo,
      telphone,
      processInstance: {
        createTime,
        draftUser: { userName, deptName } = {},
      } = {},
    } = base;

    return {
      // 起草人or拟稿人
      principal: userName,
      // 主办单位
      department: deptName || '',
      // 创建时间or拟稿时间 兼容在运维工具箱进入无taskInfo的情况
      createTime: taskInfo?.createTime ?? createTime,
      // 联系人
      contract: userName,
      // 联系电话
      contractPhone: telphone,
      ...this.getDefaultResult(),
      ...params,
      ...data,
    };
  };
}

export default DefaultResult;
